package datos;

import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class ControlHoras {
	public static SimpleDateFormat df = new SimpleDateFormat("d'/'MM'/'yy");
	private Map<String, Horas> mapa = null;

	public ControlHoras() {
		mapa = Collections.synchronizedMap(new TreeMap<String, Horas>(new Comparador()));
	}

	public boolean tieneHoras(String fecha) {
		return mapa.get(fecha) != null;
	}
		
	public Horas obtenerHoras(String fecha){
		return mapa.get(fecha);
	}
	
	public int obtenerHorasTotales(String fecha){
		Horas h = obtenerHoras(fecha);
		if(h==null)
			return 0;
		return h.analisis() + h.pruebas();
	}

	public void fijaHorasAnalisis(String fecha, int horasAnalisis) {
		Horas h = null;
		if (tieneHoras(fecha))
			h = obtenerHoras(fecha);
		else
			h = new Horas();

		h.fijarAnalisis(horasAnalisis);

		fijarHoras(fecha, h);
	}

	public void fijaHorasPruebas(String fecha, int horasPruebas) {
		Horas h = null;
		if (tieneHoras(fecha))
			h = obtenerHoras(fecha);
		else
			h = new Horas();

		h.fijarPruebas(horasPruebas);

		fijarHoras(fecha, h);
	}

	public String getResumenHoras() {
		int ha = 0;
		int hp = 0;

		Iterator<String> i = mapa.keySet().iterator();
		while (i.hasNext()) {
			Horas h = mapa.get(i.next());
			ha += h.analisis();
			hp += h.pruebas();
		}

		return "Analisis: " + ha + "     Pruebas: " + hp + "     Total: " + (ha + hp);
	}

	public Iterator<String> iterator(){
		return mapa.keySet().iterator();
	}
	
	public Horas horas(String key){
		return mapa.get(key);
	}
	
	public void fijarHoras(String fecha, Horas horas){
		mapa.put(fecha, horas);
	}
}

class Comparador implements Comparator<String>{

	public int compare(String f1, String f2) {
		return darLaVuelta(f1).compareTo(darLaVuelta(f2));
	}
	
	private String darLaVuelta(String fecha){
		String[] partes = fecha.split("/");
		return partes[2]+partes[1]+partes[0];
	}

}
